#!/usr/bin/perl # # genezzo.pl # Eric Rollins 2005 # # This simple sample cgi-bin script provides web access # to Genezzo. The form is used to submit a SQL statement, # And the results are returned as XML. # # Prior to running this script a Genezzo database must be # created. The script currently assumes the database was # created using # gendba.pl -gnz_home=/unsafe -init # # as user www-data. Prior to running this command the # directory /unsafe must be created and www-data given # permission to write it. # # The /unsafe directory is unsafe since any cgi-bin script can access it. # use strict; use warnings; use CGI qw(:standard escapeHTML); my $query = param('query'); if(!defined($query)){ print header(); print start_html("Genezzo"); print "

Enter Genezzo SQL Statement:

\n"; print "
\n"; print " \n"; print "

\n"; print " \n"; print "

\n"; print end_html(); exit(); } print "Content-type: text/xml\n\n"; print ''; print "\n"; use File::Path; use File::Spec; use Data::Dumper; use Genezzo::GenDBI; my $dbi_gzerr = sub { my %args = (@_); return unless (exists($args{msg})); my $sev = "UNKNOWN"; if (exists($args{severity})) { $sev = uc($args{severity}); $sev = 'WARNING' if ($sev =~ m/warn/i); # don't print 'INFO' if ($args{severity} =~ m/info/i) { return; } } print "\n"; print " "; print $sev; print "\n"; print " "; print __PACKAGE__, ": ", $args{msg}; print "\n"; print "\n"; }; sub return_error { my ($where) = @_; print " ", $where, "\n"; print "\n"; exit(); } my $gnz_home = "/unsafe"; print "\n"; my $dbh = Genezzo::GenDBI->connect($gnz_home, "NOUSER", "NOPASSWORD", {GZERR => $dbi_gzerr, PrintError => 0, RaiseError => 0}); if(!defined($dbh)){ return_error("connect"); } $dbh->do("startup"); # start the database my $sth = $dbh->prepare($query); if(!defined($sth)){ return_error("prepare"); } my $ret = $sth->execute(); if(!defined($ret)){ return_error("execute"); } my $numFields = $sth->{NUM_OF_FIELDS}; if(!defined($numFields)){ $ret = $dbh->do("commit"); if(!defined($ret)){ return_error("commit"); } print "\n"; exit(); } while (1) { my @ggg = $sth->fetchrow_array(); last unless (scalar(@ggg)); print " \n"; my $i; for($i = 0; $i < $numFields; $i++){ print " <", $sth->{NAME}->[$i], ">"; print $ggg[$i]; print "{NAME}->[$i], ">"; print "\n" } print " \n"; } print "\n";